package domain;

import java.util.Vector;

import persistencia.AdministradorPersistenciaPlan;
import view.PlanView;

public abstract class Plan implements Persistible {
	private int planId;
	private boolean facturable;
	private Vector<Servicio> servicios;

	public Plan(boolean facturable, int planId) {
		this.facturable = facturable;
		this.planId = planId;
		this.servicios = new Vector<Servicio>();
	}

	public static Vector<Plan> getPlanes() {
		return getAdministradorPersistenciaPlan().obtenerTodos();
	}

	public abstract boolean agregablePaquete();

	public int getId() {
		return planId;
	}

	public void setPlanId(int planId) {
		this.planId = planId;
	}

	public boolean isFacturable() {
		return facturable;
	}

	public void setFacturable(boolean facturable) {
		this.facturable = facturable;
	}

	public Vector<Servicio> getServicios() {
		return servicios;
	}

	public void setServicios(Vector<Servicio> servicios) {
		this.servicios = servicios;
	}

	public void agregarServicio(Servicio s) {
		this.servicios.add(s);
	}

	public void modificarServicio() {

	}

	public void borrarServicio(Servicio s) {
		servicios.remove(s);
	}
	

	public PlanView getView() {
		return new PlanView(this.getId(), this.getClass().getSimpleName(),
				this.isFacturable());
	}

	public static Plan getPlan(int planId) {
		return getAdministradorPersistenciaPlan().getPlan(planId);
	}

	private static AdministradorPersistenciaPlan getAdministradorPersistenciaPlan() {
		return AdministradorPersistenciaPlan.getInstancia();
	}

	public static int getIdAdicional() {
		return getAdministradorPersistenciaPlan().getAdicional();
	}

	public abstract float calcularCosto(Consumo consumo);

}
